#file for quick tests of QAP solver
import path_setter
from pyQAP import *
import numpy as np


prob = problems.QAPLIB('nug12')
#print heuristic_helpers.parallel_annealing_all(10, 2, prob, 2, 100)
#prob = problems.reduced(prob, 13)
solver.set_heuristic("parallel_annealing")
solver.set_lower_bound("gilmore_lawler")
sol = solver.parallel_solve(prob, 2)
print sol

def main():
    return 1 

#test LAP solver
#m = np.array([[90, 75, 75, 80], [35, 85, 55, 65], [125, 95, 90, 105], [45, 110, 95, 115]], dtype=np.float); print m
#print lap.hungarian(m, 4)
#glb_bound = bound_helpers
#lap.create_hungarian(4).gilmore_lawler_full(prob.f, prob.d, prob.n)
#print "My Bound:", glb_bound

#prob_str = 'nug12'
#prob = problems.QAPLIB(prob_str)
#
#psol = heuristics.parallel_annealing(prob)
#print psol

#print "Time: %f"%(time.time()-tick)
3
#prob = problems.QAPLIB('tho30')
#lap.create_hungarian(100)
#print bound_helpers.gilmore_lawler_full(prob.f, prob.d, np.zeros((prob.n, prob.n)),  prob.n)
#
#matrix = np.array([[  2.,  96.,  79.,  53.,   4.,  35.,  10.,  65.,  45.,   9.,  37.,
#         14.,  52.,  47.,  27.,  16.,  24.,   2.,  22.,  77.],
#       [ 98.,  10.,  25.,  75.,  79.,   7.,  16.,  26.,  46.,  11.,  56., 
#         11.,  53.,  53.,  21.,  98.,  86.,  16.,  73.,  80.],
#       [ 38.,  81.,  95.,   8.,  15.,  77.,  91.,  61.,  56.,  10.,  41.,
#         98.,  72.,  15.,  95.,  77.,  27.,  33.,  52.,  71.],
#       [ 90.,  51.,   7.,  31.,  51.,  80.,  47.,  90.,  13.,  12.,  10.,
#         50.,  24.,  22.,   5.,  22.,  24.,  46.,  21.,  64.],
#       [ 65.,  73.,  41.,  47.,   3.,  29.,  55.,  13.,  90.,  77.,  42.,
#         11.,  41.,  25.,  27.,  83.,   5.,  66.,  95.,  65.],
#       [ 43.,  82.,  56.,  80.,  88.,  74.,  43.,   5.,  73.,  80.,   5.,
#         65.,  72.,  75.,  25.,  97.,  10.,  60.,  52.,   9.],
#       [ 21.,  18.,  41.,  40.,  74.,  67.,  63.,  32.,  28.,  32.,  55.,
#         78.,  67.,  40.,   4.,  79.,  40.,  17.,  40.,  75.],
#       [ 35.,  54.,  99.,  89.,  32.,  36.,  93.,  64.,  65.,  16.,  22.,
#         62.,  69.,  48.,  83.,  85.,  34.,  21.,  10.,  49.],
#       [ 28.,   1.,  16.,  73.,  85.,  12.,  37.,  52.,  95.,  76.,  99.,
#         68.,  43.,   6.,  89.,  32.,  20.,  77.,  32.,   2.],
#       [ 54.,  27.,  59.,   0.,  21.,  38.,  18.,  27.,  79.,  82.,  26.,
#         66.,   6.,  69.,  95.,  33.,  54.,  97.,  71.,  53.],
#       [ 92.,  97.,  61.,  34.,   1.,  87.,  60.,  87.,  15.,  97.,  98.,
#         72.,  90.,  31.,  32.,  27.,  32.,  16.,  11.,  33.],
#       [ 69.,  40.,  77.,  27.,  22.,   6.,  81.,  51.,  17.,  65.,  75.,
#         84.,   6.,  66.,  55.,  41.,  60.,  35.,  88.,  22.],
#       [ 40.,  67.,  97.,  67.,  41.,  82.,   2.,  57.,  12.,  64.,   0.,
#          0.,  48.,  88.,  13.,  62.,  26.,  10.,  53.,  77.],
#       [ 44.,  51.,  97.,   8.,  34.,  92.,   7.,  67.,  67.,  75.,  93.,
#         41.,  28.,   9.,  86.,  10.,  31.,  87.,  31.,  54.],
#       [ 42.,   4.,   4.,  21.,  63.,  19.,  10.,  61.,  84.,  97.,  93.,
#         77.,  48.,   5.,  58.,  68.,  12.,  34.,  73.,  81.],
#       [ 11.,  75.,  34.,  47.,   3.,  21.,  74.,  24.,  70.,  35.,   4.,
#         66.,  19.,  69.,  94.,  41.,  95.,  31.,  18.,  37.],
#       [ 77.,  44.,  44.,  97.,  48.,  83.,  68.,  98.,   7.,  44.,  28.,
#         93.,  93.,  98.,  50.,  23.,  59.,  55.,  78.,  62.],
#       [ 59.,  81.,   4.,  66.,  63.,  27.,  14.,  12.,  46.,  48.,  28.,
#         70.,  38.,  95.,  90.,  44.,  47.,  32.,  71.,  53.],
#       [ 95.,  95.,  46.,  99.,  36.,  32.,  28.,  14.,  34.,   3.,  17.,
#         16.,  59.,  57.,  25.,  98.,  18.,  97.,  39.,  78.],
#       [ 39.,  48.,  39.,  94.,  51.,   8.,  36.,  90.,  42.,  12.,  35.,
#         70.,  81.,  27.,  87.,  89.,  53.,  68.,  62.,  88.]])
#from munkres import Munkres, print_matrix
#
#m = Munkres()
#indexes = m.compute(matrix.copy())
#total = 0
#for row, column in indexes:
#    value = matrix[row][column]
#    total += value
#print 'total cost: %d' % total
